iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Mobile Development

Android Studio 30天進階學習系列 第 7

Android Studio 30天進階學習-DAY07_DataBinding的介紹

  • 分享至 

  • xImage
  •  

今天來介紹一下DataBinding的功能。

首先建立一個空的專案檔,或者你要直接應用在現有的專案上也行。

Dependencies依賴元件

在下方的程式碼中有一個名為dataBinding的區域,在這下方有個enabled的參數,這邊將其設置為true之後並Sync,目前大部分的新開專案似乎基本上都預設為true了。

  • build.gradle
android{
    // ...

    dataBinding {
        enabled = true
    }
    
    // ...
}

Layout_XML文件

以上依賴設定完成並Sync之後,來到設置畫面文件的XML檔案,來到這邊後對著如 圖1. 的程式碼按下Alt+Enter鍵之後會跳出以下樣式,並點選Convert to data binding layout,之後就會自動變換成如圖2的樣式

  1. 圖1.
    https://ithelp.ithome.com.tw/upload/images/20230917/201503708OoIMmZSrm.png
  2. 圖2.
    https://ithelp.ithome.com.tw/upload/images/20230917/20150370kbvtRpc6fo.png

程式碼

  • XML Layout
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_vertical"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/name_txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{model.name}" />

        <TextView
            android:id="@+id/password_TV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{model.password}" />

        <EditText
            android:id="@+id/userName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Text UserName"
            android:inputType="textPersonName"
            android:text="@={model.name}" />

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Text Password"
            android:inputType="text|number"
            android:text="@={model.password}" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{model::Click}"
            android:text="Button" />
    </LinearLayout>
  • Module
public class UserInfoModel extends BaseObservable {
    private String name;
    private String password;

    public UserInfoModel(String name,String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void Click(View view) {
        Toast.makeText(view.getContext(),"Send\n"+
                                              "Name:"+getName()+"\n"+
                                              "Password:"+getPassword(),
                                              Toast.LENGTH_LONG).show();
        Log.e("model", "Send\n"+
                                 "Name:"+getName()+"\n"+
                                 "Password:"+getPassword());
        // 提醒有變動並更新物件。
        notifyPropertyChanged(BR._all);
    }
}
  • Activity
public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 添加Binding程式碼
        binding = DataBindingUtil.
                setContentView(this, R.layout.activity_main);
        UserInfoModel model = new UserInfoModel("","");
        binding.setModel(model);
    } // onCreate
}

結果截圖

https://ithelp.ithome.com.tw/upload/images/20230917/20150370pAuL9JiF1e.png

送出結果後更新畫面,上方的TextView獲取輸入框內的資料並顯示。

https://ithelp.ithome.com.tw/upload/images/20230917/20150370Gq473xXnq5.png

添加DataBinding與不添加的差異

以往要在Acitivty類別中獲取XML layout布置檔的物件,必須使用諸如findViewById之類的才能取得,這邊添加了DataBinding之後,程式碼的行數減少了許多。

過往的寫法如圖

在過去尚未學習DataBinding的使用方法時可能會用以下的方式去撰寫,在寫之前必須先到外部建立TextView與EditText的變數,才可以取得EditText實例化並附寫到TextView上。

https://ithelp.ithome.com.tw/upload/images/20230917/20150370PZuJS6unVx.png

  • 使用FindViewById的結果截圖
    https://ithelp.ithome.com.tw/upload/images/20230917/20150370v4aEwBnjEa.png

以上是今天的DataBinding,這個功能是以往沒有詳細去學習使用的功能,雖然不用DataBinding也能寫出一個App,但是使用DataBinding能夠縮短更多的程式碼行數並且達到一樣的效果,讓程式碼畫面變得更加簡潔。


上一篇
Android Studio 30天進階學習-DAY06_Dagger2_04(架構實作_下)
下一篇
Android Studio 30天進階學習-DAY08_Kotlin介紹-上
系列文
Android Studio 30天進階學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言